package SortStudy;

import java.io.*;
import java.lang.reflect.Array;
import java.util.Arrays;


public class SortTest {
    public static void main(String[] args) {
        System.out.println(sortTest(new Integer(10),"maoPao",10));
    }

    /**
     * 用于测试随机数组生成器的方法
     */
    public static void makeRandomTest(){
        Object[] result = new Object[0];
        try{
           result=SortUtil.makeRandomArray(new String("1"),100);
        }catch (Exception e){
            e.printStackTrace();
        }

        for(Object obj:result){
            System.out.println(obj.toString());
        }
    }

    /**
     * 测方法用于测试排序方法
     * @param obj 需要测试的类型
     * @return 返回测试结果
     */
    public static <T extends Comparable> boolean sortTest(T obj,String type,int count){
        Object[] testResults = new Object[0];
        try{
            testResults=SortUtil.makeRandomArray(obj,count);
            Object[] arraySort=new Object[testResults.length];
            T[] result= (T[])Array.newInstance(obj.getClass(),testResults.length);
            int i=0;
            for(Object object:testResults){
                File file=new File("temp");
                if(file.exists()){
                    boolean flag=file.delete();
                }
                FileOutputStream fileOut = new FileOutputStream("temp");//定义文件字节输出流，源为temp
                ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);//定义对象字节输出流
                objectOut.writeObject(object);//将对象序列化信息写入源中
                objectOut.close();//关闭对象输出流
                FileInputStream fileIn = new FileInputStream("temp");//定义文件输入流，源为temp
                ObjectInputStream objectIn = new ObjectInputStream(fileIn);//定义对象字节输入流
                Object target = (T)objectIn.readObject();//将源中的对象读出得到object的克隆
                objectIn.close();//关闭对象输入流
                arraySort[i]=target;
                result[i]=(T)object;
                i++;
            }
            testResults=SortUtil.Sort(result,type);
            Arrays.sort(arraySort);

            for(int n=0;n<testResults.length;n++){
                if(!testResults[n].equals(arraySort[n])){
                    return false;
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return true;
    }


}
